Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[test optimization] Do not init on package managers #4946

Merged
merged 2 commits into from
Nov 28, 2024

Conversation

juan-fernandez
Copy link
Collaborator

@juan-fernandez juan-fernandez commented Nov 26, 2024

What does this PR do?

Do not initialize test optimization (FKA test visibility) if the running process is a package manager, such as yarn or npm.

So for example if you run your tests like this:

  "scripts": {
    "test": "jest"
  }
yarn test

yarn actually spawns a new process for jest, meaning that at least two dd-trace initializations happen.

Motivation

We recommend initializing test optimization with NODE_OPTIONS='-r dd-trace/ci/init'. This means that every node process will initialize the tracer. This is usually safe, but it leads to unnecessary code being run. By avoiding the most commonly used processes, that is, package managers, we already save a bunch of initializations.

Plugin Checklist

  • Unit tests.

Copy link

github-actions bot commented Nov 26, 2024

Overall package size

Self size: 8.12 MB
Deduped: 94.62 MB
No deduping: 95.18 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.2.2 | 29.27 MB | 29.27 MB | | @datadog/native-appsec | 8.3.0 | 19.37 MB | 19.38 MB | | @datadog/native-iast-taint-tracking | 3.2.0 | 13.9 MB | 13.91 MB | | @datadog/pprof | 5.4.1 | 9.76 MB | 10.13 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.5.0 | 2.51 MB | 2.65 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 3.0.1 | 1.06 MB | 1.46 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.11.2 | 112.74 kB | 826.22 kB | | msgpack-lite | 0.1.26 | 201.16 kB | 281.59 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.0 | 109.9 kB | 109.9 kB | | semver | 7.6.3 | 95.82 kB | 95.82 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.1 | 51.46 kB | 51.46 kB | | int64-buffer | 0.1.10 | 49.18 kB | 49.18 kB | | shell-quote | 1.8.1 | 44.96 kB | 44.96 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.3.1 | 25.21 kB | 25.21 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | dc-polyfill | 0.1.4 | 23.1 kB | 23.1 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | path-to-regexp | 0.1.10 | 6.38 kB | 6.38 kB | | module-details-from-path | 1.0.3 | 4.47 kB | 4.47 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@juan-fernandez juan-fernandez force-pushed the juan-fernandez/do-not-init-on-yarn-or-pnpm branch from 42f2aa1 to 41dd94b Compare November 27, 2024 14:12
})

after(async () => {
await sandbox.remove()
await new Promise(resolve => webAppServer.close(resolve))
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unrelated fixes in this file: the webserver is useless

@juan-fernandez juan-fernandez marked this pull request as ready for review November 27, 2024 14:13
@juan-fernandez juan-fernandez requested review from a team as code owners November 27, 2024 14:13
@pr-commenter
Copy link

pr-commenter bot commented Nov 27, 2024

Benchmarks

Benchmark execution time: 2024-11-28 11:17:46

Comparing candidate commit ede950b in PR branch juan-fernandez/do-not-init-on-yarn-or-pnpm with baseline commit 5c6d126 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 263 metrics, 3 unstable metrics.

@juan-fernandez juan-fernandez merged commit 2ad4cd0 into master Nov 28, 2024
252 checks passed
@juan-fernandez juan-fernandez deleted the juan-fernandez/do-not-init-on-yarn-or-pnpm branch November 28, 2024 11:35
@@ -14,6 +25,11 @@ const options = {

let shouldInit = true

if (isPackageManager()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juan-fernandez Why do this only for CI? We pretty much never want the library as a whole to instrument package managers (or anything else in the denylist).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does APM or other products suggest users to init dd-trace via NODE_OPTIONS='-r dd-trace/init'? If the initialization is programmatic (as suggested in the docs: https://docs.datadoghq.com/tracing/trace_collection/automatic_instrumentation/dd_libraries/nodejs/#option-1-add-the-tracer-in-code) or even via --require, I don't think this is an issue at all.

I wouldn't mind at all contributing this to other products though 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants